#include <cstdio>
#include <string>
#include <iostream>

std::string AddOne(std::string digits){
    //除了首位我们最后看，其余的从最低位到最高位逐个检查
    for(int i = digits.size() - 1; i >= 1; i--){
        //如果不是9，根本就不用担心进位的问题，直接+1，结束
        if (digits[i] != '9'){
            digits[i]++;
            return digits;
        }
        //碰到9，先把它变成0（9+1=10）。那进位的1去哪里了？
        //下一轮循环会处理（这是这道题特殊的地方）
        digits[i] = '0';
    }

    //======首位单独检查========

    //首位是9，那就变成10
    if (digits[0] == '9'){
        digits[0] = '0';
        digits.insert(digits.begin(), '1');
    }else{
        //首位不是9，直接+1
        digits[0]++;
    }

    return digits;
}

/**
 * 给定一个由 **整数** 组成的 **非空** 字符串所表示的非负整数，在该数的基础上加一。

最高位数字存放在字符串的首位。

你可以假设除了整数 0 之外，这个整数不会以零开头。

**示例 1：**

**输入**：digits = 123
**输出**：124

**示例 2：**

**输入**：digits = 4321
**输出：** 4322

**示例 3：**

**输入**：digits = 9
**输出：** 10

**提示：**

- `1 <= digits.length <= 100`
- `0 <= digits[i] <= 9`
 */
int main(){
    std::string digits;
    std::getline(std::cin, digits);

    std::string result = AddOne(digits);
    printf("result = %s\n", result.c_str());
}